<?php

/**
 * SCita form.
 *
 * @package    fisio-ud
 * @subpackage form
 * @author     Johan AR <j3valentin@gmail.com>
 */
class SCitaForm extends BaseSCitaForm {

  public function configure() {
    $this->widgetSchema['profesional_id'] = new sfWidgetFormInputHidden();
    $this->widgetSchema['paciente_id'] = new sfWidgetFormInputHidden();
    $this->widgetSchema['sede_id'] = new sfWidgetFormInputHidden();
//    $this->widgetSchema['sede_id'] = new sfWidgetFormPropelChoice(array('model' => 'Sede'));
    $this->widgetSchema['fecha_hora'] = new sfWidgetFormInputHidden();
//    $this->widgetSchema['fecha_hora'] = new sfWidgetFormInputText(array(),array('readonly' => 'readonly'));
    $this->widgetSchema['estado'] = new sfWidgetFormInputHidden();

    $durations = SCitaPeer::getDurations();

    $this->widgetSchema['duracion'] = new sfWidgetFormChoice(array('choices' => SCitaPeer::getDurations()));

    $this->validatorSchema['duracion'] = new sfValidatorChoice(
                    array('choices' => array_keys($durations)),
                    array('required' => 'Selecciona la duraci&oacute;n de la cita')
    );

    $states = SCitaPeer::getStates();

    //$this->widgetSchema['estado'] = new sfWidgetFormChoice(array('choices' => SCitaPeer::getStates()));

    $this->validatorSchema['estado'] = new sfValidatorChoice(
                    array('choices' => array_keys($states)),
                    array('required' => 'Selecciona el estado de la cita')
    );
    
    $this->validatorSchema['paciente_id'] = new sfValidatorPropelChoice(array('model' => 'Usuario', 'column' => 'id', 'required' => true),array('required' => 'Ingresa un c&oacute;digo de paciente v&aacute;lido'));

    $this->validatorSchema['sede_id'] = new sfValidatorPropelChoice(array('model' => 'Sede', 'column' => 'id', 'required' => true));

    $this->validatorSchema->setPostValidator(
            new sfValidatorAnd(array(
                new sfValidatorPropelUnique(array('model' => 'SCita', 'column' => array('profesional_id', 'paciente_id', 'fecha_hora')),array()),
                new sfValidatorCallback(array('callback' => array($this, 'val'))) )
            )
    );

    unset($this['created_at'], $this['updated_at']);

    $this->widgetSchema->setLabels(array('duracion' => 'Duracion* (min)'));
  }

  public function val(sfValidatorBase $validator, array $values) {

    $Agenda = SProfesionalAgendaQuery::create()
            ->filterByInicio(array('min' => strtotime($values['fecha_hora'])))
            ->filterByFin(array('max' => strtotime($values['fecha_hora']) + 1 * 1 * $values['duracion'] * 1))
            ->count();

    if ($Agenda) {
      throw new sfValidatorErrorSchema($validator, array('fecha_hora' => new sfValidatorError($validator, 'Horario no disponible')));
    }

    // Mediante la cama de negocio comprobamos si hay stock del articulo
//    if ($values['fecha_final'] != "") {
//      if ($values['fecha_inicio'] > $values['fecha_final']) {
//        throw new sfValidatorErrorSchema($validator, array('fecha_final' => new sfValidatorError($validator, 'La segunda fecha debe ser posterior a la primera')));
//      }
//    }
    return $values;
  }

}
